package exception

import (
	"fmt"
	"net/http"
)

// 自定义业务异常的结构体
type ApiException struct {
	// Code    int    `json:"code"`
	// Message string `json:"message"`
	// 改进
	// 业务异常code
	BizCode int    `json:"code"`
	Message string `json:"message"`
	Data    any    `json:"data"`
	// http code
	HttpCode int `json:"http_code"`
}

// 构造结构体实例
// 需要传递的参数format string, a ...any，是fmt.Sprintf()需要的格式
func NewApiException(code int, format string, a ...any) *ApiException {
	HttpCode := http.StatusInternalServerError
	// code为0-500时
	if code/100 < 6 && code/100 > 0 {
		HttpCode = code
	}

	return &ApiException{
		// HttpCode: code,
		// Message:  fmt.Sprintf(format, a...),
		BizCode: code,
		Message: fmt.Sprintf(format, a...),
		// HttpCode: http.StatusOK; 要改为下面代码，不能返回200，因为返回200浏览器会认为返回的是正常页面
		HttpCode: HttpCode,
	}
}

// 实现error接口
func (a *ApiException) Error() string {
	return a.Message
}
